#ifndef __LOG_PRINT_H__
#define __LOG_PRINT_H__

namespace minic {

#include <stdio.h>
#include <string>


std::string getNowStr();

#define LOG_TAG "minic"

#define NONE "\033[m"
#define RED "\033[0;32;31m"
#define LIGHT_RED "\033[1;31m"
#define GREEN "\033[0;32;32m"
#define LIGHT_GREEN "\033[1;32m"
#define BLUE "\033[0;32;34m"
#define LIGHT_BLUE "\033[1;34m"
#define DARY_GRAY "\033[1;30m"
#define CYAN "\033[0;36m"
#define LIGHT_CYAN "\033[1;36m"
#define PURPLE "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN "\033[0;33m"
#define YELLOW "\033[1;33m"
#define LIGHT_GRAY "\033[0;37m"
#define WHITE "\033[1;37m"

#define LOGI(fmt, ...)                                                                          \
    printf(YELLOW "%s %s Line:[%d] Func:[%s]" fmt "\n", LOG_TAG, getNowStr().c_str(), __LINE__, \
           __func__, ##__VA_ARGS__);
#define LOGD(fmt, ...)                                                                        \
    printf(NONE "%s %s Line:[%d] Func:[%s]" fmt "\n", LOG_TAG, getNowStr().c_str(), __LINE__, \
           __func__, ##__VA_ARGS__);
#define LOGE(fmt, ...)                                                                       \
    printf(RED "%s %s Line:[%d] Func:[%s]" fmt "\n", LOG_TAG, getNowStr().c_str(), __LINE__, \
           __func__, ##__VA_ARGS__);
#define LOGV(fmt, ...)                                                                       \
    printf(LIGHT_GREEN "%s %s Line:[%d] Func:[%s]" fmt "\n", LOG_TAG, getNowStr().c_str(),   \
           __LINE__, __func__, ##__VA_ARGS__);


#define LOG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)
#define LOG_ERR_PRINT(fmt, ...) printf(RED ""fmt, ##__VA_ARGS__)

}
#endif